#include "TempSensorBase.h"
#include "../TinyXML/tinyxml.h"
#include <QDebug>

TempSensorBase::TempSensorBase()
{

}

void TempSensorBase::Analysis(const QString &path, TempIOConnectStr &_TempIOConnectStr, QList<QList<TempSensor> > &_TempSensorList)
{
    TiXmlDocument* xmlDocument = new TiXmlDocument();
    if(!xmlDocument->LoadFile(path.toStdString().c_str()))
    {
        qDebug() << xmlDocument->ErrorDesc();
        delete xmlDocument;
        return;
    }

    //查找xml文件中第一个名为Alarms的节点
    TiXmlElement* rootElement = xmlDocument->FirstChildElement("TempSensors");
    if(rootElement == nullptr) //节点不存在
    {
        qDebug() << xmlDocument->ErrorDesc();
        delete xmlDocument;
        return;
    }

    if(rootElement)
    {
        TiXmlElement* ConnectStrElement = rootElement->FirstChildElement("ConnectStr");
        if(ConnectStrElement != nullptr)
        {
            _TempIOConnectStr.name = ConnectStrElement->Attribute("name");
            _TempIOConnectStr.type = ConnectStrElement->Attribute("type");
        }

        for(TiXmlElement* GroupElement = rootElement->FirstChildElement("Group");
            GroupElement != nullptr; GroupElement = GroupElement->NextSiblingElement("Group"))
        {
            if(GroupElement != nullptr)
            {
                for(TiXmlElement* SubGroupElement = GroupElement->FirstChildElement("SubGroup");
                    SubGroupElement != nullptr; SubGroupElement = SubGroupElement->NextSiblingElement("SubGroup"))
                {
                    if(SubGroupElement != nullptr)
                    {
                        QList<TempSensor> _TempSensors;
                        for(TiXmlElement* TempSensorElement = SubGroupElement->FirstChildElement("TempSensor");
                            TempSensorElement != nullptr; TempSensorElement = TempSensorElement->NextSiblingElement("TempSensor"))
                        {
                            TempSensor _TempSensor;
                            TempSensorElement->QueryIntAttribute("id", &_TempSensor.id);
                            _TempSensor.name = TempSensorElement->Attribute("name");
                            TempSensorElement->QueryIntAttribute("alarm", &_TempSensor.alarm);
                            TempSensorElement->QueryIntAttribute("limit", &_TempSensor.limit);
                            TempSensorElement->QueryIntAttribute("board_id", &_TempSensor.board_id);
                            TempSensorElement->QueryIntAttribute("phyid", &_TempSensor.phyid);
                            TempSensorElement->QueryIntAttribute("port", &_TempSensor.port);
                            _TempSensors.append(_TempSensor);
                        }
                        _TempSensorList.append(_TempSensors);
                    }
                }
            }
        }
    }
    delete xmlDocument;
}

bool TempSensorBase::SaveXml(const QString &path, const TempIOConnectStr &_TempIOConnectStr, const QList<QList<TempSensor> > &_TempSensorList)
{
    TiXmlDocument* xmlDocument = new TiXmlDocument();
    if(!xmlDocument->LoadFile(path.toStdString().c_str()))
    {
        qDebug() << xmlDocument->ErrorDesc();
        delete xmlDocument;
    }

    //查找xml文件中第一个名为Alarms的节点
    TiXmlElement* rootElement = xmlDocument->FirstChildElement("TempSensors");
    if(rootElement == nullptr) //节点不存在
    {
        qDebug() << xmlDocument->ErrorDesc();
        delete xmlDocument;
    }

    if(rootElement)
    {
        TiXmlElement* ConnectStrElement = rootElement->FirstChildElement("ConnectStr");
        if(ConnectStrElement != nullptr)
        {
            ConnectStrElement->SetAttribute("name", _TempIOConnectStr.name.toStdString().c_str());
            ConnectStrElement->SetAttribute("type", _TempIOConnectStr.type.toStdString().c_str());
        }

        int index = 0;
        for(TiXmlElement* GroupElement = rootElement->FirstChildElement("Group");
            GroupElement != nullptr; GroupElement = GroupElement->NextSiblingElement("Group"))
        {
            if(GroupElement != nullptr)
            {
                for(TiXmlElement* SubGroupElement = GroupElement->FirstChildElement("SubGroup");
                    SubGroupElement != nullptr; SubGroupElement = SubGroupElement->NextSiblingElement("SubGroup"))
                {
                    if(SubGroupElement != nullptr)
                    {
                        for(TiXmlElement* TempSensorElement = SubGroupElement->FirstChildElement("TempSensor");
                            TempSensorElement != nullptr; TempSensorElement = TempSensorElement->NextSiblingElement("TempSensor"))
                        {
                            SubGroupElement->RemoveChild(TempSensorElement);
                        }
                        for (auto _TempSensor : _TempSensorList.at(index))
                        {
                            //元素类
                            TiXmlElement* ChildxmlElement = new TiXmlElement("TempSensor");
                            ChildxmlElement->SetAttribute("id", _TempSensor.id);
                            ChildxmlElement->SetAttribute("name", _TempSensor.name.toStdString().c_str());
                            ChildxmlElement->SetAttribute("alarm", _TempSensor.alarm);
                            ChildxmlElement->SetAttribute("limit", _TempSensor.limit);
                            ChildxmlElement->SetAttribute("board_id", _TempSensor.board_id);
                            ChildxmlElement->SetAttribute("phyid", _TempSensor.phyid);
                            ChildxmlElement->SetAttribute("port", _TempSensor.port);
                            SubGroupElement->LinkEndChild(ChildxmlElement);
                        }
                        index++;
                    }
                }
            }
        }
    }
    //保存
    xmlDocument->SaveFile(path.toStdString().c_str());

    delete xmlDocument;
    return true;
}
